// 从 'vue' 导入 'isReactive' 和 'isRef'
import { isReactive, isRef } from 'vue';

// 设置加载状态的函数
// 如果 'loading' 是一个引用(ref)，则设置其值为 'val'
// 如果 'loading' 是一个响应式对象，则设置其 'loading' 属性为 'val'
function setLoading(loading, val) {
	if (loading !== undefined) {
		if (isRef(loading)) {
			loading.value = val;
		} else if (isReactive(loading)) {
			loading.loading = val;
		}
	}
}

// 导出一个异步函数 'useAsync'
// 在函数开始时，设置 'loading' 为 'true'
// 在函数结束时，设置 'loading' 为 'false'
export const useAsync = async (func, loading) => {
	setLoading(loading, true);

	return await func.finally(() => setTimeout(() => setLoading(loading, false), 100));
};
